//交换节点
//思路是采用三指针的方式
public class question_24 {

}
class Solution_24 {
    public ListNode swapPairs(ListNode head) {
//        只有0个节点或者1个节点
        if(head==null||head.next==null){
            return head;
        }
//        定义三个指针
        ListNode l1=null;
        ListNode l2=head;
        ListNode r=head.next;
//        保存结果的开始节点
        ListNode result=r;
        do{
            if(l1!=null){
                l1.next=r;
            }
            l2.next=r.next;
            r.next=l2;
//            调整三个指针的位置
            l1=l2;
            if(l2.next!=null){
                l2=l2.next;
            }else{
                break;
//                这个时候break说明后面没有元素了，所以不用接着交换了
            }
//            走到这一步的时候这时的l2已经在后一个位置上了
            if(l2.next!=null){
                r=l2.next;
            }else {
                break;
//                这个时候break说明上一轮交换之后后面只有一个元素了，也不用交换了
            }
        }while (true);
        return result;

    }
}
